//select os
#define LINUX
// #define WIN
//security level
#define LAC_LIGHT

//modulus
#define Q 251
#define BIG_Q 257024//1024*Q 
#define q_half 126
#define neg_one 250
#define HASHLEN 32

#if defined(LAC_LIGHT)
#define STRENGTH "LAC_LIGHT"
#define DIM_N 512
#define DIM_N_2 256
#define DIM_N_4 128  // no use
#define DIM_N_8 64
#define SEED_LEN 32
#define PK_LEN 544 //N+SEED_LEN
#define SK_PART_LEN DIM_N
#define SK_LEN 576 //512 + 32 + 32
#define MESSAGE_LEN 16
#define CIPHER_LEN 576// polar:N*7/8+C2_VEC_NUM/2
#define C2_VEC_NUM 256 // polar:CODE_LEN*8,i.e.,N
#define NUM_ONE 128 //number of 1 or -1 in noise vector
#define HASH_TYPE "SHA256"
#define SAMPLE_LEN 590
#define NTTQ 18433
#define Q_half 9217
#define Q_mod_q 110
#define neg_Q_mod_q 141 // -Q mod q + q = -110+251=141
#define Q_sub_q 18182 // NTTQ-q
#define BITLEN_Q 15
#define INVERSE_q 2611
#define B_q 25
#define SEED_LEN 32
#define Beta 65536
#define INVERSE_N 18397
#define INVERSE_Q -18431
#define INVERSE_N_BETA 128
#define B_Q 10237
#endif

#if defined(LAC128)
#define STRENGTH "LAC128"
#define DIM_N 512
#define DIM_N_2 256
#define DIM_N_4 128  // no use
#define DIM_N_8 64
#define SEED_LEN 32
#define PK_LEN 544 //N+SEED_LEN
#define SK_PART_LEN DIM_N
#define SK_LEN 576 //512 + 32 + 32
#define MESSAGE_LEN 16
#define CIPHER_LEN 640// polar:N*7/8+C2_VEC_NUM*3/8
#define C2_VEC_NUM 512 // polar:CODE_LEN*8,i.e.,N
#define NUM_ONE 128 //number of 1 or -1 in noise vector
#define HASH_TYPE "SHA256"
#define SAMPLE_LEN 590
#define NTTQ 18433
#define Q_half 9217
#define Q_mod_q 110
#define neg_Q_mod_q 141 // -Q mod q + q = -110+251=141
#define Q_sub_q 18182 // NTTQ-q
#define Q_sub_uint8 18177 // NTTQ-256
#define BITLEN_Q 15
#define INVERSE_q 2611
#define B_q 25
#define SEED_LEN 32
#define Beta 65536
#define INVERSE_N 18397
#define INVERSE_Q -18431
#define INVERSE_N_BETA 128
#define B_Q 10237
#endif

#if defined(LAC256)
#define STRENGTH "LAC256"
#define DIM_N 1024
#define DIM_N_2 512
#define DIM_N_4 256
#define DIM_N_8 128
#define SEED_LEN 32
#define PK_LEN 1056//(N+SEED_LEN)
#define SK_PART_LEN DIM_N
#define SK_LEN 1088 //1024 + 32 + 32
#define MESSAGE_LEN 32
#define CIPHER_LEN 1280// polar:(N+C2_VEC_NUM/2)
#define C2_VEC_NUM 512 // polar:CODE_LEN*8,i.e.,N
#define NUM_ONE 192 //number of 1 or -1 in noise vector
#define HASH_TYPE "SHA256"
#define SAMPLE_LEN 815

#define NTTQ 18433
#define Q_half 9217
#define Q_mod_q 110
#define neg_Q_mod_q 141 // -Q mod q + q = -110+251=141
#define Q_sub_q 18182 // NTTQ-q
#define Q_sub_uint8 18177 // NTTQ-256
#define BITLEN_Q 15
#define INVERSE_q 2611
#define B_q 25
#define SEED_LEN 32
#define Beta 65536
#define INVERSE_N 18415
#define INVERSE_Q -18431
#define INVERSE_N_BETA 64
#define B_Q 10237
#endif
